package com.carrental.rental.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.carrental.rental.dto.ContractDTO;
import com.carrental.rental.entity.Contract;
import com.carrental.rental.vo.ContractVO;

/**
 * 合同服务接口
 */
public interface ContractService extends IService<Contract> {

    /**
     * 创建合同
     *
     * @param contractDTO 合同DTO
     * @return 合同ID
     */
    Long createContract(ContractDTO contractDTO);

    /**
     * 根据ID获取合同详情
     *
     * @param id 合同ID
     * @return 合同VO
     */
    ContractVO getContractById(Long id);

    /**
     * 根据合同号获取合同详情
     *
     * @param contractNo 合同号
     * @return 合同VO
     */
    ContractVO getContractByContractNo(String contractNo);

    /**
     * 根据订单ID获取合同详情
     *
     * @param orderId 订单ID
     * @return 合同VO
     */
    ContractVO getContractByOrderId(Long orderId);

    /**
     * 分页查询用户合同
     *
     * @param page   分页参数
     * @param userId 用户ID
     * @param status 合同状态
     * @return 分页合同VO
     */
    Page<ContractVO> pageUserContracts(Page<Contract> page, Long userId, Integer status);

    /**
     * 分页查询所有合同
     *
     * @param page       分页参数
     * @param contractNo 合同号
     * @param orderNo    订单号
     * @param userId     用户ID
     * @param status     合同状态
     * @return 分页合同VO
     */
    Page<ContractVO> pageContracts(Page<Contract> page, String contractNo, String orderNo, Long userId, Integer status);

    /**
     * 签署合同
     *
     * @param id 合同ID
     * @return 是否成功
     */
    boolean signContract(Long id);

    /**
     * 使合同失效
     *
     * @param id 合同ID
     * @return 是否成功
     */
    boolean invalidateContract(Long id);
} 